------------------------------------------------------
--
-- classe principale del gioco lato server
--
--
--
------------------------------------------------------
with Field_Package;		use Field_Package;
with Ball;      		use Ball;
with Ball_Controller;      		use Ball_Controller;
with Timer_Package;		use Timer_Package;
with Player_Package;	use Player_Package;
with Manager_Package;	use Manager_Package;
with Referee_Package;	use Referee_Package;

package Game is
    
	-- dichiarazione di oggetto remoto
    -- pragma Remote_Types;
	-- pragma Shared_Passive;
	-- pragma Remote_Call_Interface;
        
	F : Field_Access := new Field(22);
	B : Ball_Access := new Bl(F);
	Tm : TimeCount_Access := new TimeCount;
	
	-- inizializzazione del moviment della palla
	T : Ball_Controller_Access := new Ball_Ctrl(F, B, 40);
		
	-- inizializzazione delle caratteristiche dei giocatori
	TP1 : PropsArray_Access := new PropsArray;
	TP2 : PropsArray_Access := new PropsArray;
		
	-- inizializzazione dell'array di giocatori
	Players : array (1..22) of Player_Access;
		
	-- inizializzazione delle squadre
	T1 : Team_Access := new Team;
	T2 : Team_Access := new Team;
			
	-- manager
	M1 : Manager_Access := new Manager(F, T1, TP1);
	M2 : Manager_Access := new Manager(F, T2, TP2);
	
	-- referee
	R : Referee_Access := new Referee (F, B);
	
	-- timer
	Tmr : Timer_Access;
    
    procedure Play;
    
    function GetField return Field_Access;
       
    function GetBall return Ball_Access;
       
    function GetTimer return Timer_Access;
       
    function GetTimeCount return TimeCount_Access;
       
end Game;
